package models

type VpcRequest struct {
	VpcName     string            `json:"vpcName"`
	CidrBlock   string            `json:"cidrBlock"`
	Description string            `json:"description"`
	Tags        map[string]string `json:"tags"`
}

type VpcResponse struct {
	VpcId          string            `json:"vpcId"`
	VpcName        string            `json:"vpcName"`
	CidrBlock      string            `json:"cidrBlock"`
	Description    string            `json:"description"`
	Tags           map[string]string `json:"tags"`
	CreationTime   string            `json:"CreationTime,omitempty" xml:"CreationTime,omitempty"`
	IsDefault      bool              `json:"IsDefault,omitempty" xml:"IsDefault,omitempty"`
	NatGatewayIds  []string          `json:"NatGatewayIds,omitempty" xml:"NatGatewayIds,omitempty" type:"Struct"`
	RegionId       string            `json:"RegionId,omitempty" xml:"RegionId,omitempty"`
	RouterTableIds []string          `json:"RouterTableIds,omitempty" xml:"RouterTableIds,omitempty" type:"Struct"`
	Status         string            `json:"Status,omitempty" xml:"Status,omitempty"` // *   **Pending**: being configured **Available**: available
	VSwitchIds     []string          `json:"VSwitchIds,omitempty" xml:"VSwitchIds,omitempty" type:"Struct"`
}

type VSwitchResponse struct {
	AvailableIpAddressCount int64  `json:"AvailableIpAddressCount,omitempty" xml:"AvailableIpAddressCount,omitempty"`
	CidrBlock               string `json:"CidrBlock,omitempty" xml:"CidrBlock,omitempty"`
	CreationTime            string `json:"CreationTime,omitempty" xml:"CreationTime,omitempty"`
	Description             string `json:"Description,omitempty" xml:"Description,omitempty"`
	IsDefault               bool   `json:"IsDefault,omitempty" xml:"IsDefault,omitempty"`
	RouteTable              string `json:"RouteTable,omitempty" xml:"RouteTable,omitempty" type:"Struct"`
	Status                  string `json:"Status,omitempty" xml:"Status,omitempty"` // *   **Pending**  **Available**
	VSwitchId               string `json:"VSwitchId,omitempty" xml:"VSwitchId,omitempty"`
	VSwitchName             string `json:"VSwitchName,omitempty" xml:"VSwitchName,omitempty"`
	VpcId                   string `json:"VpcId,omitempty" xml:"VpcId,omitempty"`
	ZoneId                  string `json:"ZoneId,omitempty" xml:"ZoneId,omitempty"`
}

type VSwitchRequest struct {
	VpcId       string `json:"vpcId"`
	VSwitchName string `json:"VSwitchName"`
	CidrBlock   string `json:"cidrBlock"`
	ZoneId      string `json:"zoneId"`
	Description string `json:"description"`
}

type RouteTableResponse struct {
	CreationTime   string `json:"CreationTime,omitempty" xml:"CreationTime,omitempty"`
	RouteTableId   string `json:"RouteTableId,omitempty" xml:"RouteTableId,omitempty"`
	RouteTableName string `json:"RouteTableName,omitempty" xml:"RouteTableName,omitempty"`
	VpcId          string `json:"VpcId,omitempty" xml:"VpcId,omitempty"`
	VSwitch        string `json:"VSwitch"`
}

type RouteTableRequest struct {
	RouteTableName string `json:"RouteTableName"`
	VpcId          string `json:"vpcId"`
	Description    string `json:"description"`
}

type RouteEntryRequest struct {
	RouteTableId         string `json:"RouteTableId"`         //路由表ID
	DestinationCidrBlock string `json:"DestinationCidrBlock"` // 路由条目的目标网段
	NextHopId            string `json:"NextHopId"`            // 路由条目的下一跳实例ID
	RouteEntryName       string `json:"RouteEntryName"`       // 路由条目的名称
	Description          string `json:"description"`          // 路由条目的描述信息
	NextHopType          string `json:"NextHopType"`          // 路由条目的下一跳类型
	//Instance（默认值）：ECS实例。
	//HaVip：高可用虚拟IP。
	//RouterInterface：路由器接口。
	//NetworkInterface：弹性网卡。
	//VpnGateway：VPN网关。
	//IPv6Gateway：IPv6网关。
	//NatGateway：NAT网关。
	//Attachment：转发路由器。
	//VpcPeer：VPC对等连接。
}

type RouteEntryResponse struct {
	DestinationCidrBlock string `json:"DestinationCidrBlock,omitempty" xml:"DestinationCidrBlock,omitempty"`
	RouteEntryId         string `json:"RouteEntryId,omitempty" xml:"RouteEntryId,omitempty"`
	RouteTableId         string `json:"RouteTableId,omitempty" xml:"RouteTableId,omitempty"`
	Status               string `json:"Status,omitempty" xml:"Status,omitempty"`
}
